//package table;
//
//import java.sql.Connection;
//import java.sql.PreparedStatement;
//import java.sql.ResultSet;
//import java.sql.SQLException;
//import java.util.ArrayList;
//import java.util.Iterator;
//import java.util.List;
//
//import table.col.Col;
//
//public class RelatedCol {
//	private String relatedName;
//	private Table ATable;
//	private Table BTable;
//	private Table ABTable;
//	private List<ResultCol> resultList;
//
//	public void setRelatedName(String relatedName) {
//		this.relatedName = relatedName;
//	}
//	public String getRelatedName() {
//		return relatedName;
//	}
//	public void setATable(Table ATable) {this.ATable = ATable;}
//	public Table getATable() {return ATable;}
//	
//	public void setBTable(Table BTable) {this.BTable = BTable;}
//	public Table getBTable() {return BTable;}
//	
//	public void setABTable(Table ABTable) {this.ABTable = ABTable;}
//	public Table getABTable() {return ABTable;}
//	
//	public ArrayList <ArrayList<Row>> listAll(List<Row> AIdList){
//		
//		ArrayList <ArrayList<Row>> results = new ArrayList <ArrayList<Row>>();
//		Connection conn = this.ABTable.getConnection();
//		ArrayList<Row> dataList = new ArrayList<Row>();
//		ArrayList<String> AIdPairList =  new ArrayList<String>();
//		Iterator et = null;
//		if(null != conn && AIdList.size() > 0)
//		{
//			//select AId, BId, BValues from BTable left join ABTable on BTable.Id = ABTable.BId  where AId in AIdList
//			String AIdListStr = "";
//			for(et = AIdList.iterator();et.hasNext();){
//				Row dataRow = (Row) et.next();
//				String AId = dataRow.getId();
//				AIdListStr = AIdListStr + ", '" + AId+"'";
//			}
//			AIdListStr = "(" + AIdListStr.substring(2) + ")";
//			String AId = ATable.getIDCol().getName();
//			String BId = BTable.getIDCol().getName();
//			String BValues = "";
//			List<Col> nameList =  BTable.getNameList();
//			for(et = nameList.iterator();et.hasNext();){
//				Col BValue = (Col) et.next();
//				BValues = BValues + ", BTable." + BValue.getName() + " ";
//			}
//			String sqlString = "select ATable."+ AId +" ,  ABTable."+ BId +
//					" " + BValues + "from  " + ATable.getDataTableName() + " as ATable left join "
//					+ ABTable.getDataTableName() + " as ABTable on ATable."+ AId +" = ABTable." + AId 
//					+ " left join " + BTable.getDataTableName() +" as BTable on BTable."+ BId +" = ABTable." + BId 
//					+ " where " + " ATable."+ AId + " in " + AIdListStr;
//			PreparedStatement stmt = null;
//	     	ResultSet rs = null;
//			try {
//				stmt = conn.prepareStatement(sqlString);
//				rs = stmt.executeQuery();
//			} catch (SQLException e) {e.printStackTrace();}
//			try {while(null != rs && rs.next()){
//				Col idCol = BTable.getIDCol();
//				String idName = idCol.getName();
//				Row dtr = new Row(BTable.getColList());
//				dtr.setId((String) idCol.getColValue(rs.getString(idName)));
//				List<Col> headList = BTable.getNameList();
//				for(int i = 0; i < headList.size(); i++){
//						Col col = headList.get(i);
//						Object value = col.getColValue(rs.getObject(col.getName()));
//						if(!dtr.addData(value)){break;}
//				}
//				dataList.add(dtr);
//				AIdPairList.add(rs.getString(AId));
//			}} catch (Exception e) {e.printStackTrace();}
//			Iterator<Row> etTemp = null;
//			Iterator<String> etTemp2 = null;
//			Col idCol = ATable.getIDCol();
//			try{
//				Row dataRowTemp = null;
//				Row dataRowTempA = null;
//				String dataId = ""; 
//				String dataIdA = "";
//				for(et = AIdList.iterator();et.hasNext();){
//					dataRowTempA = (Row) et.next();
//					dataIdA = idCol.getColValue(dataRowTempA.getId()).toString();
//					ArrayList<Row> curDataList = new ArrayList<Row>();
//					etTemp2 = AIdPairList.iterator();
//					for(etTemp = dataList.iterator();etTemp.hasNext()&&etTemp2.hasNext();){
//						dataRowTemp = etTemp.next();
//						String dataIdB = idCol.getColValue(dataRowTemp.getId()).toString();
//						dataId = (String) idCol.getColValue(etTemp2.next());
//						if(dataIdB.length()>0&&dataId.equalsIgnoreCase(dataIdA)){
//							curDataList.add(dataRowTemp);
//						}
//					}
//					results.add(curDataList);
//				}
//			}catch(Exception e){e.printStackTrace();}
//		}
//		return results;
//	}
//
//	public ArrayList<Row> list(Row AId){
//		List<Row> results = new ArrayList<Row>();
//		results.add(AId);
//		return listAll(results).get(0);
//	}
//	
//	public ArrayList<Row> ListDataRow(String queryString){
//		
//		Connection conn = this.ABTable.getConnection();
//		ArrayList<Row> results = new ArrayList<Row>();
//		
//		if(null != conn)
//		{
//			List<Col> colList = this.getBTable().getColList();
//			List<Col> nameList = this.getBTable().getNameList();
//
//			Col idColB = this.getBTable().getIDCol();
//			String idName = idColB.getName();
//			String sqlQueryStr = "";
//			String sqlNameStr = "";
//			Iterator<Col> et = null;
//			try {
//				for(et=nameList.iterator();et!=null&&et.hasNext();){
//					Col curCol = et.next();
//					sqlNameStr = sqlNameStr + ", " + curCol.getName();
//					sqlQueryStr = sqlQueryStr + " or " + curCol.getName() 
//						+ " like '%" + curCol.getColValue(queryString) + "%'";
//				}
//				if(sqlNameStr.length() > 0 && sqlQueryStr.length() > 0){
//					sqlQueryStr = sqlQueryStr.substring(3);
//					PreparedStatement stmt = null;
//			     	ResultSet rs = null;
//					String sqlString = "select distinct top 15 " + idName + sqlNameStr + " from "+ this.getBTable().getDataTableName() + " where 1=1"
//						+ " and ( " + sqlQueryStr + " )";
//						stmt = conn.prepareStatement(sqlString);
//						rs = stmt.executeQuery();
//						if(rs!=null){
//							while(rs.next()){
//								Row dtr = new Row(colList);
//								dtr.setId((String) idColB.getColValue(rs.getString(idName)));
//								List<Col> headList = this.getBTable().getNameList();
//								for(int i = 0; i < headList.size(); i++){
//										Col col = headList.get(i);
//										Object value = col.getColValue(rs.getObject(col.getName()));
//										if(!dtr.addData(value)){break;}
//								}
//								results.add(dtr);
//							}
//						}
//				}
//			} catch (Exception e) {e.printStackTrace();}
//			finally{
//				return results;
//			}
//		}
//		return results;
//	}
//	
//	public boolean add(String AId, String BId){
//		
//		Connection conn = this.ABTable.getConnection();
//		if(null != conn && AId.length() > 0 && BId.length() > 0)
//		{
//			//select AId, BId, BValues from BTable left join ABTable on BTable.Id = ABTable.BId  where AId in AIdList
//			String AIdName = ATable.getIDCol().getName();
//			String BIdName = BTable.getIDCol().getName();
//			Col idColA = ATable.getIDCol();
//			Col idColB = BTable.getIDCol();
//			PreparedStatement stmt = null;
//			ResultSet rs = null;
//			try {
//				String sqlString = "select count(*) from " + this.ABTable.getDataTableName()
//								+ " where 1=1 and " + AIdName + " = '" + idColA.getColValue(AId)
//								+ "' and " + BIdName + " = '" + idColB.getColValue(BId) +"'";
//				stmt = conn.prepareStatement(sqlString);
//				rs = stmt.executeQuery();
//				int hasCount = 0;
//				if(rs.next()){hasCount = rs.getInt(1);}
//				if(rs==null || hasCount <= 0){
//					sqlString = "INSERT INTO "+ this.ABTable.getDataTableName() 
//					+" (["+ AIdName +"], ["+ BIdName +"]) VALUES ('"+ idColA.getColValue(AId) +"', '"+ idColB.getColValue(BId) +"')";
//					stmt = conn.prepareStatement(sqlString);
//					return stmt.execute();
//				}
//			} catch (Exception e) {}
//			finally{
//			}
//		}
//		return false;
//	}
//	
//	public boolean delete(String AId, String BId){
//		Connection conn = this.ABTable.getConnection();
//		if(null != conn && AId.length() > 0 && BId.length() > 0)
//		{
//			//select AId, BId, BValues from BTable left join ABTable on BTable.Id = ABTable.BId  where AId in AIdList
//			String AIdName = ATable.getIDCol().getName();
//			String BIdName = BTable.getIDCol().getName();
//			Col idColA = ATable.getIDCol();
//			Col idColB = BTable.getIDCol();
//			PreparedStatement stmt = null;
//			ResultSet rs = null;
//			try {
//				String sqlString = "select count(*) from " + this.ABTable.getDataTableName()
//								+ " where 1=1 and " + AIdName + " = '" + idColA.getColValue(AId)
//								+ "' and " + BIdName + " = '" + idColB.getColValue(BId) +"'";
//				stmt = conn.prepareStatement(sqlString);
//				rs = stmt.executeQuery();
//				int hasCount = 0;
//				if(rs.next()){hasCount = rs.getInt(1);}
//				if(rs!=null&& hasCount > 0){
//					sqlString = "DELETE FROM "+ this.ABTable.getDataTableName() + " where 1=1 and (" 
//					+" ("+ AIdName +" = '"+ idColA.getColValue(AId) +"') and ("+ BIdName +" = '"+ idColB.getColValue(BId) +"'))";
//					stmt = conn.prepareStatement(sqlString);
//					return stmt.execute();
//				}
//			} catch (Exception e) {}
//			finally{
//			}
//		}
//		return false;
//	}
//
//	public boolean clear(String AId){
//		
//		return false;
//	}
//	public void setResultList(List<ResultCol> resultList) {
//		this.resultList = resultList;
//	}
//	public List<ResultCol> getResultList(){
//		if(this.resultList == null){
//			this.setResultList(new ArrayList<ResultCol>());
//		}
//		return resultList;
//	}
//	
//	public ArrayList <ArrayList<String>> listAllResult(List<Row> AIdList){
//		
//		ArrayList <ArrayList<String>> results = new ArrayList <ArrayList<String>>();
//		
//		ArrayList<String> AIdPairList =  new ArrayList<String>();
//		Iterator et = null;
//		Iterator eti = null;
//		Connection conn = this.ABTable.getConnection();
//		if(null != conn && AIdList.size() > 0)
//		{
//			//select AId, BId, BValues from BTable left join ABTable on BTable.Id = ABTable.BId  where AId in AIdList
//			String AIdListStr = "";
//			for(et = AIdList.iterator();et.hasNext();){
//				Row dataRow = (Row) et.next();
//				String AId = dataRow.getId();
//				AIdListStr = AIdListStr + ", '" + AId+"'";
//			}
//			AIdListStr = "(" + AIdListStr.substring(2) + ")";
//			String AId = ATable.getIDCol().getName();
//			String BId = BTable.getIDCol().getName();
//			String BValues = "";
//			List<Col> nameList =  BTable.getNameList();
//			for(eti = this.getResultList().iterator();eti.hasNext();){
//				ResultCol resultField = (ResultCol) eti.next();
//				for(et = nameList.iterator();et.hasNext();){
//					Col BValue = (Col) et.next();
//					if(BValue.getName().equalsIgnoreCase(resultField.getField())){
//						BValues = BValues + ", " + resultField.getFunction() + "( BTable."+ resultField.getField() +" ) as " + resultField.getFieldId() + " ";
//					}
//				}
//			}
//	     	
//			ResultSet rs = null;
//			if(BValues.length() > 0){
//				String sqlString = "select ABTable."+ AId +" " + BValues + " from "	+ ABTable.getDataTableName() + " as ABTable " 
//				+ " left join " + BTable.getDataTableName() +" as BTable on BTable."+ BId +" = ABTable." + BId 
//				+ " where " + " ABTable."+ AId + " in " + AIdListStr + " group by ABTable."+ AId;
//				PreparedStatement stmt = null;
//				try {
//					stmt = conn.prepareStatement(sqlString);
//					rs = stmt.executeQuery();
//				} catch (SQLException e) {e.printStackTrace();}
//			}
//
//			ArrayList<ArrayList<String>> dataList = new ArrayList<ArrayList<String>>();
//			
//			try {while(null != rs && rs.next()){
//				Col idCol = BTable.getIDCol();
//				String idName = idCol.getName();
//				ArrayList<String> dtr = new ArrayList<String>();
//				List<ResultCol> headList = this.getResultList();
//				for(int i = 0; i < headList.size(); i++){
//					ResultCol col = headList.get(i);
//					Object value = col.getColValue(rs.getObject(col.getFieldId()));
//					dtr.add(value.toString());
//				}
//				dataList.add(dtr);
//				AIdPairList.add(rs.getString(AId));
//			}} catch (Exception e) {e.printStackTrace();}
//			
//			Iterator<ArrayList<String>> etTemp = null;
//			Iterator<String> etTemp2 = null;
//			Col idCol = ATable.getIDCol();
//			try{
//				ArrayList<String> dataRowTemp = null;
//				Row dataRowTempA = null;
//				String dataId = ""; 
//				String dataIdA = "";
//				for(et = AIdList.iterator();et.hasNext();){
//					dataRowTempA = (Row) et.next();
//					dataIdA = idCol.getColValue(dataRowTempA.getId()).toString();
//					ArrayList<String> curDataList = new ArrayList<String>();
//					etTemp2 = AIdPairList.iterator();
//					for(etTemp = dataList.iterator();etTemp.hasNext()&&etTemp2.hasNext();){
//						dataRowTemp = etTemp.next();
//						dataId = (String) idCol.getColValue(etTemp2.next());
//						if(dataId.equalsIgnoreCase(dataIdA)){
//							curDataList = dataRowTemp;
//						}
//					}
//					results.add(curDataList);
//				}
//			}catch(Exception e){e.printStackTrace();}
//		}
//		return results;
//	}
//}
